﻿#ifndef __SS_BUFFER_H__
#define __SS_BUFFER_H__
#include "../ssBaseDefine.h"
#include <cstring>

namespace StarSeeker
{

class ssBuffer
{
public:
	ssBuffer();
	ssBuffer(ulint len);
	ssBuffer(const ssBuffer& bf);
	~ssBuffer();
	void operator = (const ssBuffer& bf);
	//动态创建一块缓存
	bool Init(ulint len);
	//从外部传入一块缓存，不能修改大小
	bool Init(char* buf, ulint len);
	//从新分配大小
	bool Resize(ulint newLen, bool saveData);
	//返回缓存地址
	char* Buf() const;
	//返回当前位置的地址
	char* CurrentBuf();
	//返回当前长度
	ulint Size() const;
	//返回剩余长度
	ulint ResidueSize();
	//返回最大长度
	ulint MaxSize() const;
	//缓存是否满
	bool IsFull() const;
	//增加当前长度
	bool AddSize(ulint sz);
	//减少当前长度
	bool SubSize(ulint sz);
	//设置当前长度
	bool SetSize(ulint sz);
	//清空
	void Empty(bool setZero=false);
	//释放内存
	void Clear();
	//是否是动态创建的
	bool IsDynamic() const;
	//追加写入一段数据
	bool Write(const void* buf, ulint len);
	//裁剪数据
	bool SubData(ulint offset, ulint len);
	//数据前移
	bool MoveForward(ulint offset);

private:
	//拷贝构造
	void CopyFrom(const ssBuffer& bf);

	ulint		m_maxLen;	//最大长度
	ulint		m_len;		//使用长度
	char	*	m_data;		//缓存地址
	bool		m_isNew;	//是否是动态创建的
};

}
#endif
